package com.cj.tool

import android.app.Dialog
import android.view.Gravity
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.baidu.mapapi.map.*
import com.baidu.mapapi.model.LatLng
import com.bigkoo.pickerview.builder.TimePickerBuilder
import com.cj.publish.utils.execute
import com.cj.publish.utils.getTime
import com.cj.publish.utils.toast
import com.cj.tool.bean.BaseArrayData
import com.cj.tool.bean.LocationEntity
import com.cj.tool.http.BaseObserver
import com.cj.tool.http.RestClient
import com.cj.tool.utils.LogUtil
import com.cj.tool.utils.SimpleConfig
import kotlinx.android.synthetic.main.activity_icon.*
import kotlinx.android.synthetic.main.layout_market.view.*
import java.text.SimpleDateFormat
import java.util.*

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 *
 * Created by yi on 2021/3/3.
 */
class IconActivity : BaseActivity() {

    var today: String? = null

    override fun layoutId(): Int {
        return R.layout.activity_icon
    }

    override fun initView() {
        getPageHead(this, null).apply {
            setTitleText("经纬度定位工具")
        }
        //是否双击放大当前地图中心点 默认：false 即按照双击位置放大地图
        mapView.map.uiSettings.setEnlargeCenterWithDoubleClickEnable(true)
        //去除缩放工具
        mapView.showZoomControls(false)
        //去除百度logo
        mapView.removeViewAt(1)
        initTimePicker()
        today = SimpleDateFormat("yyyy-MM-dd").format(Date())
        today?.apply {
            tv_icon_today.text = subSequence(5, 10)
            getData(this)
        }
    }

    override fun setListener() {
        ll_icon_date.setOnClickListener {
            mDialog?.show()
        }
        tv_yesterday.setOnClickListener {
            tv_icon_today.text = getYesterdayStr(-1).subSequence(5, 10)
            getData(getYesterdayStr(-1))
        }
        tv_yesterday2.setOnClickListener {
            tv_icon_today.text = getYesterdayStr(-2).subSequence(5, 10)
            getData(getYesterdayStr(-2))
        }
    }

    /**
     * 获取昨天日期字符串
     * @param format  格式(例如:yyyy-MM-dd HH:mm:ss)
     * @return
     */
    fun getYesterdayStr(int: Int): String {
        val cal = Calendar.getInstance()
        cal.add(Calendar.DATE, int)
        return SimpleDateFormat("yyyy-MM-dd").format(cal.time)
    }

    var mDialog: Dialog? = null
    private fun initTimePicker() {//Dialog 模式下，在底部弹出
        val selectedDate = Calendar.getInstance()//系统当前时间
        val startDate = Calendar.getInstance()
        startDate.set(2020, 1, 1)
        val pvTime = TimePickerBuilder(this) { date, v ->
            tv_icon_today.text = getTime(date).subSequence(5, 10)
            getData(getTime(date))
        }
            .setType(booleanArrayOf(true, true, true, false, false, false))
            .isDialog(true) //默认设置false ，内部实现将DecorView 作为它的父控件。
            .setItemVisibleCount(5) //若设置偶数，实际值会加1（比如设置6，则最大可见条目为7）
            .setLineSpacingMultiplier(2.0f)
            .setCancelText("取消")//取消按钮文字
            .setSubmitText("确定")//确认按钮文字
            .setSubmitColor(resources.getColor(R.color.blue_277EFF))//确定按钮文字颜色
            .setCancelColor(resources.getColor(R.color.blue_277EFF))//取消按钮文字颜色
            .setDate(selectedDate)// 如果不设置的话，默认是系统时间*/
            .setRangDate(startDate, selectedDate)//起始终止年月日设定
            .isAlphaGradient(true)
            .build()

        mDialog = pvTime.dialog
        if (mDialog != null) {
            val params = FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                Gravity.BOTTOM
            )
            params.leftMargin = 0
            params.rightMargin = 0
            pvTime.dialogContainerLayout.layoutParams = params

            val dialogWindow = mDialog?.window
            if (dialogWindow != null) {
                dialogWindow.setWindowAnimations(com.bigkoo.pickerview.R.style.picker_view_slide_anim)//修改动画样式
                dialogWindow.setGravity(Gravity.BOTTOM)//改成Bottom,底部显示
                dialogWindow.setDimAmount(0.3f)

                val windowManager = windowManager
                val display = windowManager.defaultDisplay
                val lp = dialogWindow.attributes
                lp.height = display.height //设置宽度
                lp.width = display.width //设置宽度
                dialogWindow.attributes = lp
            }
        }
    }

    private fun getData(theDate: String) {
        val user = SimpleConfig.getParam(this, LoginActivity.INPUT_USER, "admin") as String
        execute(RestClient().httpService.queryUpload(theDate, user),
            object : BaseObserver<BaseArrayData<LocationEntity>>(this, true) {
                override fun onNext(t: BaseArrayData<LocationEntity>) {
                    mapView.map.clear()
                    if (t.data.isNullOrEmpty()) {
                        toast("该天标记为空")
                    } else {
                        t.data.forEachIndexed { index, it ->
                            if (it.latitude.length > 8 && it.longitude.length > 8) {
                                LogUtil.e(it.latitude + "-" + it.longitude)
                                setMarker(
                                    LatLng(it.latitude.toDouble(), it.longitude.toDouble()),
                                    it.locationType, it.locationName
                                )
                            }
                            if (index == t.data.size - 1) {
                                resetMap(LatLng(it.latitude.toDouble(), it.longitude.toDouble()))
                            }
                        }
                    }
                }

            })
    }

    //构建Marker图标
    private fun setMarker(latLng: LatLng, locationType: String?, locationName: String?) {
        //构建MarkerOption，用于在地图上添加Marker
        val view = LayoutInflater.from(this).inflate(R.layout.layout_market, null)
        view.apply {
            if (!locationType.isNullOrEmpty() && !locationName.isNullOrEmpty()) {
                tv_marker_name.text = "$locationType:$locationName"
            } else {
                tv_marker_name.text = locationType
            }
        }
        val option: OverlayOptions = MarkerOptions()
            .position(latLng)
            .icon(BitmapDescriptorFactory.fromView(view))
        //在地图上添加Marker，并显示
        mapView.map.addOverlay(option)
    }

    private fun resetMap(latLng: LatLng) {
        val builder = MapStatus.Builder()
        builder.target(latLng).zoom(18f)
        mapView.map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()))
    }

    override fun onResume() {
        super.onResume()
        //在activity执行onResume时执行mMapView. onResume ()，实现地图生命周期管理  
        mapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        //在activity执行onPause时执行mMapView. onPause ()，实现地图生命周期管理  
        mapView.onPause()
    }

    override fun onDestroy() {
        //在activity执行onDestroy时执行mMapView.onDestroy()，实现地图生命周期管理  
        mapView.onDestroy()
        super.onDestroy()

    }
}